//权限拦截

import router from "./router";
import store from "./store";
import NProgress from "nprogress";
import "nprogress/nprogress.css"; //引入进度条

//不需要导出  只需要让代码执行即可

const whiteList = ["/login", "/404"]; //定义白名单
//前置守卫
//next 是前置守卫必须执行的钩子函数，next必须执行 如果不执行 页面就死了
//next()放过
//next(false)跳转终止
//next(地址)跳转到某个地址
router.beforeEach(async (to, from, next) => {
  NProgress.start(); //开启进度条
  //  首先判断有无token
  if (store.getters.token) {
    //如果有token
    if (to.path === "/login") {
      next("/"); // 跳到主页  // 有token 用处理吗？不用
    } else {
      // 如果没有id这个值 才会调用 vuex的获取资料的action
      if (!store.getters.userId) {
        const { roles } = await store.dispatch("user/getUserInfo");
        const routes = await store.dispatch(
          "permission/filterRoutes",
          roles.menus
        );
        // console.log(roles.menus);//obj
        // console.log(routes); //undefind
        router.addRoutes([...routes,{
          path:'*',redirect:'/404',hidden:'true'
        }]);// 添加到路由表
        next(to.path);
      }
      next(); // 跳到主页  // 有token 用处理吗？不用
    }
  } else {
    //没有token的情况
    if (whiteList.indexOf(to.path) > -1) {
      //白名单要去的位置
      next();
    } else {
      next("/login");
    }
  }
  NProgress.done(); //手动关闭进度条 为了解决 手动切换地址时  进度条的不关闭的问题
});

//后置守卫
router.afterEach(() => {
  NProgress.done(); //关闭进度条
});
